package com.tangyh.lamp.common.util;

import com.tangyh.basic.context.ContextUtil;
import lombok.RequiredArgsConstructor;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * RedissonUtil 基础工具
 * 该工具类是业务无关性，作为基础组建可用于其他系统
 * 建议：不同业务类型继承该类
 */
@RequiredArgsConstructor
@Component
public class RedissonUtil {

    public static RedissonClient redissonClient;

    @Autowired
    public void setRedissonClient(RedissonClient redissonClient) {
        RedissonUtil.redissonClient = redissonClient;
    }

    /**
     * 获取租户[表单提交]的分布式锁<p>
     * 格式：租户编号 + :RedissonLock: + 发票信息<p>
     * 例子：0000:RedissonLock:formSubmit<p>
     *
     * @return 分布式锁
     */
    public static RLock getFormSubmit(String key) {
        return redissonClient.getLock(ContextUtil.getTenant() + ":RedissonLock:formSubmit:" + key);
    }
}
